package com.demo.main.dao;

import java.util.List;
/**
 * BaseDao 接口定义了通用的数据访问操作，适用于各种实体类。
 * 它提供了基本的 CRUD 操作以及一些高级查询功能。
 * @param <T> 实体类型
 * @param <E> 主键类型
 */
public interface BaseDao<T, E> {
    // 查询所有记录
    List<T> selectAll();
    // 按降序查询所有记录
    List<T> selectAllByDesc();
    // 根据条件查询记录
    List<T> selectByCondition(T entity);
    // 根据条件按降序查询记录
    List<T> selectByConditionDesc(T entity);
    // 根据条件查询单条记录
    T selectOneByCondition(T entity);
    // 插入一条记录
    void insertOne(T entity);
    // 根据 ID 删除记录
    void deleteById(E id);
    // 根据多个 ID 批量删除记录
    void batchDeleteByIds(List<?> ids);
    // 根据 ID 更新记录
    void updateById(T entity);
    // 根据 ID 查询单条记录
    T selectOneById(E id);
    // 根据 ID 查询多条记录
    List<T> selectById(E id);
    // 根据某列的值查询记录
    List<T> selectByColumn(String column, Object value);
    // 根据某列的值按降序查询记录
    List<T> selectByColumnDesc(String column, Object value);
    // 根据某列的值查询单条记录
    T selectOneByColumn(String column, Object value);
    // 统计总记录数
    Integer selectCount();
    // 根据条件统计记录数
    Integer selectCountByCondition(T entity);
    // 分页查询记录
    List<T> selectPagination(Integer pageNum);
    // 选择性分页查询记录
    List<T> selectSelectivePagination(int pageNum, T entity);
}